#!/usr/bin/env python
# from apps.goods.models import SKU 这种导入方法不对，
# 当我们在执行脚本文件时，他是独立于Django环境独立运行的，
# 如果在该脚本中需要用到django的东西，需要加载django环境
# 指定导包路径：为了后面的导包按照美多商城的导包方式正常导包
import sys
# sys.path.insert(导包路径列表的角标0表示导包路径在最前面,'新的导包路径，这里需要指向第一个meiduo_mail')
sys.path.insert(0,'../../')

# 加载django环境
# 设置django运行环境所依赖的环境变量
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'meiduo_mail.settings.dev'

# 让Django进行一次初始化
import django
django.setup()

# 导入SKU模型类
from apps.goods.models import SKU  # 添加了导包路径之后就能按照之前的方式导包了
from apps.goods.goods_utils import *
from django.template import loader
from django.conf import settings


# 定义静态化详情页方法
def action_static_detail_html(sku):
    # 查询要渲染页面的数据
    # 查询商品sku信息：作为方法参数传入
    # 查询分类
    categories = get_categories()
    # 查询面包屑导航
    breadcrumb = get_breadcrumb(sku.category)
    # 查询商品规格信息
    specs = get_goods_specs(sku)
    # 构造上下文字典
    context = {
        'categories': categories,
        'breadcrumb': breadcrumb,
        'specs': specs,
        'sku': sku
    }
    # 使用上下文字典渲染详情页HTML文件，并得到详情页的HTML字符串
    template = loader.get_template('detail.html')
    detail_html_str = template.render(context)
    # 将详情页的HTML字符串写入指定的静态化文件中
    file_path = os.path.join(os.path.dirname(os.path.dirname(settings.BASE_DIR)), 'front_end_pc/goods/' + str(sku.id) +'.html')
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(detail_html_str)


if __name__ == '__main__':
    # 脚本入口：查询所有的SKU信息，每遍历一个，就生成一个对应的静态详情页
    skus = SKU.objects.all()
    for sku in skus:
        print(sku.id)
        action_static_detail_html(sku)